curl --request POST \
--url https://api.range.org/v2/screening/checks/{check_id}/cancelled \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/screening/checks/{check_id}/cancelled"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.range.org/v2/screening/checks/{check_id}/cancelled', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.range.org/v2/screening/checks/{check_id}/cancelled",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/screening/checks/{check_id}/cancelled"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/screening/checks/{check_id}/cancelled")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/screening/checks/{check_id}/cancelled")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"check_id": "6f1c2a9e-3b7d-4c55-9a0e-2d8f1e4b7c31",
"direction": "outbound",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"client_name": "Northwind Custody",
"counterparty_address": "0x62348b9125085ee5286aa68a7a17d15f090192bd",
"counterparty_name": null,
"network": "eth",
"amount": "48000.00",
"asset": "USDC",
"transfer_ref": "pay_8812",
"transaction_id": null,
"tx_hash": null,
"is_approved_counterparty": false,
"flagged": true,
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"case_id": "0d9c7a1e-5b3f-4a2e-8c6d-1f2e3a4b5c6d",
"travel_rule_followup": {
"status": "awaiting",
"executed_at": null,
"tx_hash": null,
"due_at": null,
"resolved_at": null,
"provider": "notabene",
"case_id": null,
"travel_rule_status": "complete"
},
"created_at": "2026-10-07T09:12:03.120Z",
"verdict": "blocked",
"status": "pending",
"executed_at": null,
"cancelled_at": null,
"execution_case_id": null
}[Beta] report that an outbound payment was not sent
Records that the payment was abandoned, so an allowed check is not mistaken for one still in flight. Safe to resend; 409 once it was reported executed.
curl --request POST \
--url https://api.range.org/v2/screening/checks/{check_id}/cancelled \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/screening/checks/{check_id}/cancelled"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.range.org/v2/screening/checks/{check_id}/cancelled', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.range.org/v2/screening/checks/{check_id}/cancelled",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/screening/checks/{check_id}/cancelled"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/screening/checks/{check_id}/cancelled")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/screening/checks/{check_id}/cancelled")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"check_id": "6f1c2a9e-3b7d-4c55-9a0e-2d8f1e4b7c31",
"direction": "outbound",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"client_name": "Northwind Custody",
"counterparty_address": "0x62348b9125085ee5286aa68a7a17d15f090192bd",
"counterparty_name": null,
"network": "eth",
"amount": "48000.00",
"asset": "USDC",
"transfer_ref": "pay_8812",
"transaction_id": null,
"tx_hash": null,
"is_approved_counterparty": false,
"flagged": true,
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"case_id": "0d9c7a1e-5b3f-4a2e-8c6d-1f2e3a4b5c6d",
"travel_rule_followup": {
"status": "awaiting",
"executed_at": null,
"tx_hash": null,
"due_at": null,
"resolved_at": null,
"provider": "notabene",
"case_id": null,
"travel_rule_status": "complete"
},
"created_at": "2026-10-07T09:12:03.120Z",
"verdict": "blocked",
"status": "pending",
"executed_at": null,
"cancelled_at": null,
"execution_case_id": null
}Authorizations
Authorization method required to allow user to access the api endpoints.
Path Parameters
Response
"6f1c2a9e-3b7d-4c55-9a0e-2d8f1e4b7c31"
inbound, outbound "outbound"
"6859927c-292e-4077-8d6a-70542c00a267"
"Northwind Custody"
"0x62348b9125085ee5286aa68a7a17d15f090192bd"
null
"eth"
"48000.00"
"USDC"
"pay_8812"
null
null
false
true
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The case the flag opened, null when it did not flag. A /v2/cases id: read and work it with GET /v2/cases/{id} (source_type transaction_screening).
"0d9c7a1e-5b3f-4a2e-8c6d-1f2e3a4b5c6d"
Show child attributes
Show child attributes
"2026-10-07T09:12:03.120Z"
Outbound only, always present there. Send only on "allowed".
allowed, blocked "blocked"
Inbound only: pending while a check is awaited, then clear or flagged. Release a quarantined deposit on clear.
pending, clear, flagged null
null
The /v2/cases id of the case a blocked transfer sent anyway opened.
null
Was this page helpful?